Display bytes/second during pull
authorJames Antill <james@and.org>
Fri, 25 Jul 2014 06:10:53 +0000 (02:10 -0400)
committerColin Walters <walters@verbum.org>
Mon, 28 Jul 2014 12:37:15 +0000 (08:37 -0400)
Add start time to the AsyncProgress object, use it in the common
progress.

src/libostree/ostree-fetcher.c
src/libostree/ostree-repo-pull.c
src/ostree/ot-builtins-common.c

index a049e0f4c45f36808d21d5c7a371d9c57b434986..0ea4d29d8b26fa07343a532be8a4db1e71e05d46 100644 (file)
@@ -140,6 +140,7 @@ on_request_started (SoupSession  *session,
                     gpointer      user_data)
 {
   OstreeFetcher *self = user_data;
+  
   g_hash_table_insert (self->sending_messages, msg, g_object_ref (msg));
 }
 
index 2cdc6c151bca952008f6276e9f2feede6e61563a..51eb4d0c1be62815781d1903c487ba917ff9559f 100644 (file)
@@ -65,6 +65,8 @@ typedef struct {
   guint             n_fetched_metadata;
   guint             n_fetched_content;
 
+  guint64           start_time;
+  
   gboolean      have_previous_bytes;
   guint64       previous_bytes_sec;
   guint64       previous_total_downloaded;
@@ -143,6 +145,7 @@ update_progress (gpointer user_data)
   guint fetched = pull_data->n_fetched_metadata + pull_data->n_fetched_content;
   guint requested = pull_data->n_requested_metadata + pull_data->n_requested_content;
   guint n_scanned_metadata = pull_data->n_scanned_metadata;
+  guint64 start_time = pull_data->start_time;
  
   g_assert (pull_data->progress);
 
@@ -152,6 +155,7 @@ update_progress (gpointer user_data)
   ostree_async_progress_set_uint (pull_data->progress, "requested", requested);
   ostree_async_progress_set_uint (pull_data->progress, "scanned-metadata", n_scanned_metadata);
   ostree_async_progress_set_uint64 (pull_data->progress, "bytes-transferred", bytes_transferred);
+  ostree_async_progress_set_uint64 (pull_data->progress, "start-time", start_time);
 
   if (pull_data->fetching_sync_uri)
     {
@@ -1039,7 +1043,6 @@ ostree_repo_pull (OstreeRepo               *self,
   GKeyFile *remote_config = NULL;
   char **configured_branches = NULL;
   guint64 bytes_transferred;
-  guint64 start_time;
   guint64 end_time;
 
   pull_data->async_error = error;
@@ -1057,7 +1060,7 @@ ostree_repo_pull (OstreeRepo               *self,
   pull_data->requested_metadata = g_hash_table_new_full (g_str_hash, g_str_equal,
                                                          (GDestroyNotify)g_free, NULL);
 
-  start_time = g_get_monotonic_time ();
+  pull_data->start_time = g_get_monotonic_time ();
 
   pull_data->remote_name = g_strdup (remote_name);
   config = ostree_repo_get_config (self);
@@ -1310,7 +1313,7 @@ ostree_repo_pull (OstreeRepo               *self,
                              pull_data->n_fetched_metadata, pull_data->n_fetched_content,
                              (guint64)(bytes_transferred / shift),
                              shift == 1 ? "B" : "KiB",
-                             (guint) ((end_time - start_time) / G_USEC_PER_SEC));
+                             (guint) ((end_time - pull_data->start_time) / G_USEC_PER_SEC));
       ostree_async_progress_set_status (pull_data->progress, msg);
     }
 
index 8de6b6042b2e63a29b7bfdbe22da310ee0ff6fec..5e3e4e64cc926732df23bf78e55f25e617f43868 100644 (file)
@@ -52,12 +52,22 @@ ot_common_pull_progress (OstreeAsyncProgress       *progress,
       guint64 bytes_transferred = ostree_async_progress_get_uint64 (progress, "bytes-transferred");
       guint fetched = ostree_async_progress_get_uint (progress, "fetched");
       guint requested = ostree_async_progress_get_uint (progress, "requested");
+      guint64 bytes_sec = (g_get_monotonic_time () - ostree_async_progress_get_uint64 (progress, "start-time")) / G_USEC_PER_SEC;
       gs_free char *formatted_bytes_transferred =
         g_format_size_full (bytes_transferred, 0);
+      gs_free char *formatted_bytes_sec = NULL;
 
-      g_string_append_printf (buf, "Receiving objects: %u%% (%u/%u) %s",
+      if (!bytes_sec) // Ignore first second
+        formatted_bytes_sec = g_strdup ("-");
+      else
+        {
+          bytes_sec = bytes_transferred / bytes_sec;
+          formatted_bytes_sec = g_format_size (bytes_sec);
+        }
+
+      g_string_append_printf (buf, "Receiving objects: %u%% (%u/%u) %s/s %s",
                               (guint)((((double)fetched) / requested) * 100),
-                              fetched, requested, formatted_bytes_transferred);
+                              fetched, requested, formatted_bytes_sec, formatted_bytes_transferred);
     }
   else if (outstanding_writes)
     {